/**
 * 路由权限相关方法
 */

const authority = 'vite-element-admin-role'

/**
 * 获取用户本地存储的权限列表
 * @returns auth list []
 */

export function getAuthority() {
  const roles = localStorage.getItem(authority) || []
  return JSON.parse(roles)
}

/**
 * 设置用户权限
 * @returns
 */

export function setAuthority(auth = []) {
  return localStorage.setItem(authority, JSON.stringify(auth))
}

/**
 * 清除用户权限
 * @returns
 */

export function removeAuthority() {
  return localStorage.removeItem(authority)
}


/**
 * 跟进用户权限过滤路由列表
 * @param {Array} routes 路由列表
 * @returns
 */
export function getAuthRoutes(routes) {
  if (routes && routes.length) {
    return routes.filter((v) => {
      if (v.children) {
        v.children = getAuthRoutes(v.children)
        if (v.children.length === 1) {
          onlyOnechildrenRoute(v)
        }
        if (v.children == null || v.children.length == 0) return false
      } else if (!verifyAuthority(v)) {
        return false
      }
      return true
    })
  }
  return routes
}

/**
 * 根据权限过滤后子路由children只有一个时，
 * 判断父的redirect地址是否在children存在
 * 不存在children的第一个path为父的redreact path
 */
function onlyOnechildrenRoute(route) {
  route.redirect = route.children[0].path
}

/**
 * 验证路由上的权限是否存在
 * 根据用户返回权限列表判断当前路由是否通过
 * @param {Object} route 路由对象
 * @returns
 */
function verifyAuthority(route) {
  if (!route.authority) return false
  const roles = getAuthority()
  console.log(roles)
  return route.authority.some((citem) => roles.includes(citem))
}
